home *** CD-ROM | disk | FTP | other *** search
/ Languguage OS 2 / Languguage OS II Version 10-94 (Knowledge Media)(1994).ISO / gnu / glibc108.zip / glibc108 / ctype / ctype.h < prev    next >
C/C++ Source or Header  |  1993-07-29  |  5KB  |  153 lines

  1. /* Copyright (C) 1991, 1992, 1993 Free Software Foundation, Inc.
  2. This file is part of the GNU C Library.
  3.  
  4. The GNU C Library is free software; you can redistribute it and/or
  5. modify it under the terms of the GNU Library General Public License as
  6. published by the Free Software Foundation; either version 2 of the
  7. License, or (at your option) any later version.
  8.  
  9. The GNU C Library is distributed in the hope that it will be useful,
  10. but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  12. Library General Public License for more details.
  13.  
  14. You should have received a copy of the GNU Library General Public
  15. License along with the GNU C Library; see the file COPYING.LIB.  If
  16. not, write to the, 1992 Free Software Foundation, Inc., 675 Mass Ave,
  17. Cambridge, MA 02139, USA.  */
  18.  
  19. /*
  20.  *    ANSI Standard 4.3: CHARACTER HANDLING    <ctype.h>
  21.  */
  22.  
  23. #ifndef    _CTYPE_H
  24.  
  25. #define    _CTYPE_H    1
  26. #include <features.h>
  27.  
  28. __BEGIN_DECLS
  29.  
  30. /* These are all the characteristics of characters.  All the
  31.    interdependencies (such as that an alphabetic is an uppercase or a
  32.    lowercase) are here.  If there get to be more than
  33.    (sizeof (unsigned short int) * CHAR_BIT) distinct characteristics,
  34.    many things must be changed that use `unsigned short int's.  */
  35. enum
  36. {
  37.   _ISupper = 1 << 0,            /* UPPERCASE.  */
  38.   _ISlower = 1 << 1,            /* lowercase.  */
  39.   _IScntrl = 1 << 2,            /* Control character.  */
  40.   _ISdigit = 1 << 3,            /* Numeric.  */
  41.   _ISspace = 1 << 4,            /* Whitespace.  */
  42.   _IShex = 1 << 5,            /* A - F, a - f.  */
  43.   _ISpunct = 1 << 6,            /* Punctuation.  */
  44.   _NOgraph = 1 << 7,            /* Printing but nongraphical.  */
  45.   _ISblank = 1 << 8,            /* Blank (usually SPC and TAB).  */
  46.   _ISalpha = _ISupper | _ISlower,     /* Alphabetic.  */
  47.   _ISalnum = _ISalpha | _ISdigit,    /* Alphanumeric.  */
  48.   _ISxdigit = _ISdigit | _IShex,    /* Hexadecimal numeric.  */
  49.   _ISgraph = _ISalnum | _ISpunct,    /* Graphical.  */
  50.   _ISprint = _ISgraph | _NOgraph    /* Printing.  */
  51. };
  52.  
  53. /* These are defined in localeinfo.c.
  54.    The declarations here must match those in localeinfo.h.
  55.  
  56.    These point to the second element ([1]) of arrays of size (UCHAR_MAX + 1).
  57.    EOF is -1, so [EOF] is the first element of the original array.
  58.    ANSI requires that the ctype functions work for `unsigned char' values
  59.    and for EOF.  The case conversion arrays are of `short int's rather than
  60.    `unsigned char's because tolower (EOF) must be EOF, which doesn't fit
  61.    into an `unsigned char'.  */
  62. extern __const unsigned short int *__ctype_b;    /* Characteristics.  */
  63. extern __const short int *__ctype_tolower;    /* Case conversions.  */
  64. extern __const short int *__ctype_toupper;    /* Case conversions.  */
  65.  
  66. #define    __isctype(c, type) \
  67.   (__ctype_b[(int) (c)] & (unsigned short int) type)
  68.  
  69. #define    __isascii(c)    (((c) & (1 << 7)) == 0)    /* If high bit is set.  */
  70. #define    __toascii(c)    ((c) & 0x7f) /* Mask off high bit.  */
  71.  
  72. #define    __tolower(c)    ((int) __ctype_tolower[(int) (c)])
  73. #define    __toupper(c)    ((int) __ctype_toupper[(int) (c)])
  74.  
  75. #define    __exctype(name)    extern int name __P ((int))
  76.  
  77. /* The following names are all functions:
  78.      int isCHARACTERISTIC(int c);
  79.    which return nonzero iff C has CHARACTERISTIC.
  80.    For the meaning of the characteristic names, see the `enum' above.  */
  81. __exctype (isalnum);
  82. __exctype (isalpha);
  83. __exctype (iscntrl);
  84. __exctype (isdigit);
  85. __exctype (islower);
  86. __exctype (isgraph);
  87. __exctype (isprint);
  88. __exctype (ispunct);
  89. __exctype (isspace);
  90. __exctype (isupper);
  91. __exctype (isxdigit);
  92.  
  93. #ifdef    __USE_GNU
  94. __exctype (isblank);
  95. #endif
  96.  
  97.  
  98. /* Return the lowercase version of C.  */
  99. extern int tolower __P ((int __c));
  100.  
  101. /* Return the uppercase version of C.  */
  102. extern int toupper __P ((int __c));
  103.  
  104.  
  105. #if defined(__USE_SVID) || defined(__USE_MISC)
  106.  
  107. /* Return nonzero iff C is in the ASCII set
  108.    (i.e., is no more than 7 bits wide).  */
  109. extern int isascii __P ((int __c));
  110.  
  111. /* Return the part of C that is in the ASCII set
  112.    (i.e., the low-order 7 bits of C).  */
  113. extern int toascii __P ((int __c));
  114.  
  115. #endif /* Use SVID or use misc.  */
  116.  
  117. #ifdef    __USE_SVID
  118. /* These are the same as `toupper' and and `tolower'.  */
  119. __exctype (_toupper);
  120. __exctype (_tolower);
  121. #endif
  122.  
  123. #ifndef    __NO_CTYPE
  124. #define    isalnum(c)    __isctype((c), _ISalnum)
  125. #define    isalpha(c)    __isctype((c), _ISalpha)
  126. #define    iscntrl(c)    __isctype((c), _IScntrl)
  127. #define    isdigit(c)    __isctype((c), _ISdigit)
  128. #define    islower(c)    __isctype((c), _ISlower)
  129. #define    isgraph(c)    __isctype((c), _ISgraph)
  130. #define    isprint(c)    __isctype((c), _ISprint)
  131. #define    ispunct(c)    __isctype((c), _ISpunct)
  132. #define    isspace(c)    __isctype((c), _ISspace)
  133. #define    isupper(c)    __isctype((c), _ISupper)
  134. #define    isxdigit(c)    __isctype((c), _ISxdigit)
  135.  
  136. #ifdef    __USE_GNU
  137. #define    isblank(c)    __isctype((c), _ISblank)
  138. #endif
  139.  
  140. #define    tolower(c)    __tolower(c)
  141. #define    toupper(c)    __toupper(c)
  142.  
  143. #if defined(__USE_SVID) || defined(__USE_MISC)
  144. #define    isascii(c)    __isascii(c)
  145. #define    toascii(c)    __toascii(c)
  146. #endif
  147.  
  148. #endif /* Not __NO_CTYPE.  */
  149.  
  150. __END_DECLS
  151.  
  152. #endif /* ctype.h  */
  153.